package com.briup.day06;

/**
 * 构造器中 this 表示构造器
 * setXXX  this 表示区分
 * 方法调用  this 表示自己的对象
 * @author lining
 * @date 2024/1/15 14:21
 */
public class Person {
    private int id;//编号
    private String name;//名字
    private String address;//住址

    //每个类中都默认一个无参构造方法.方法名就是类名,有方法体 没有返回值也没有viod
    public Person(){
        //显式定义出来（默认提供）
    }
    /*
        有参构造器 （不同个数参数 ）

        修饰符(public )
        private:表示不能再类的外部创建该类实例对象。
                 工具类中构造器都是私有的。
        方法名： 只能是类名
        方法体内部：对属性进行重复赋值
        参数列表： 多种不同情况。根据初始化场景
        代码优化： 将重复代码提取出来，放在一个位置。多次调用
     */

    //定义一个有参构造器(创建对象，并赋值)，实现创建person对象并直接赋值
    public Person(int id,String name,String adrress){
        this.id = id;
        this.name = name;
        this.address = adrress;
    }
    //2参构造器
    public Person(String name,String adrress){
        //2参构造器调用3参构造器(实现代码复用)
        this(0,name,adrress);
    }
    //2参构造器
    public Person(int id,String name){
//        System.out.println("开始赋值");
        this(id,name,null);// this() 必须放在方法执行第一行，否则编译错误
        System.out.println("赋值成功");
    }
    //1参构造器
    public Person(String name){
        //1参构造器调用2参构造器实现代码复用
        this(name,null);
    }

    /*
        提供能够访问私有属性的方法get/set  getId setId
        alt+insert  快速生成模版代码
     */

    public int getId() {
        return id;//this.id
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;//改变我的属性name为局部变量name
        //this表示当任意一个对象调用setName，将对象的属性name=jack
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    //打印对象详细信息 toString

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

